abstract class vs concrete class